iT邦幫忙

2022 iThome 鐵人賽

DAY 10
1
Modern Web

快還要更快,讀作 quick 的下一代傳輸層協定: QUIC系列 第 10

【Day 10】淺談 QUIC Handshake 流程 (四) - 怎麼利用 wireshark 去對照 RFC + 筆者的段落反思

  • 分享至 

  • xImage
  •  

前言

在前一天的文章中我們設定了 wireshark 對於 QUIC 的支持,今天我們將來介紹在 RFC9000 中描述 Handshark 的流程,因為加密的詳細敘述都描述在 RFC9001 QUIC-TLS 內,RFC9000 更注重的是以封包的角度,整個 Handshake 是怎麼進行的,今天的文章內出現的一些專有名詞都在之前基本術語介紹的文章中都有大略提過了,如果不熟悉的小夥伴也可以翻回去參考看看。

封包結構

這邊簡單回顧一下,QUIC 本身是基於 UDP 協定的,所以由大到小大概可以這樣分

UDP datagram → QUIC packet → QUIC frame → HTTP/3 frame

在 QUIC 中封包又分為兩種

  • Long Header Packet

    • Version Negotiation Packet
    • Initial Packet
    • 0-RTT Packet
    • HandShake Packet
    • Retry Packet
  • Short Header Packet

    • 1-RTT Packet

所以 QUIC 的 Packet 與 Frame 是獨立的兩個層次,針對 Packet header 的保護,其實 QUIC 也會對部份 Long Header Packet 的 Header 某些欄位用別的加密方式保護,之後也會介紹到。

1-RTT 建立連線過程

上圖是以封包交換的角度描述 1-RTT 的建立連線過程,每一行都是一個單獨的 QUIC 封包,冒號後面則是這個封包內包含的 frame。

建立連線由 Client 發起:

Initial[0] 封包帶有 Client HelloCRYPTO frame。

這邊我們用昨天的實驗中 wireshark 撈到的封包交互過程,看到第一個封包,由 Client 端發起的 Initial 封包

點開 QUIC IETF 欄位可以看到一些 Header 資訊

  • Header 種類為: Long Header Packet
  • Packet Type 為 Initial (00)
  • Destination Connection ID 長度
  • Destination Connection ID
  • Source Connection ID 長度
  • Source Connection ID

根據 Type 我們知道他是 Initial Packet,我們可以參考 RFC 來看每個欄位詳細的定義,請參考 RFC9000 - 17.2.2. Initial Packet

在 Payload 的部份可以繼續往下看到 CRYPTO frame

像這樣在收錄完封包後,可以用 wireshark 觀察封包交互的行為。

後續的每個步驟也能照個上面的想法利用 wireshark 觀察。

反思

今天剛好邁入第十天了,來寫個階段性的心得,因為筆者第一次參加鐵人賽,十分做死的沒有囤稿就來挑戰了...選的題目又是剛接觸的新知識,所以筆者每天都是現學現寫的XD

一開始認為用 wireshark 觀察交互似乎是個不錯的學習方式,但是後來發現像是 Handshake 這種有固定流程的機制,在講解原理跟演算法時好像就把整個流程都介紹的差不多了.. wireshark 只能觀察那些欄位的值,再去跟 RFC 文檔的做對比,如果只是為了這樣好像意義不大..?

如果想知道 CRYPTO frame 代表的值,其實自己去查文檔就足夠了,實作 library 的人會照著 RFC 的規範把資料填到對應的欄位,我覺得更重要的是這些 frame / packet 代表的意義,流程比欄位的值更重要,所以從明天開始可能會少一點 wireshark 的觀察,讓讀者們有興趣可以自己實驗,筆者之後的文章會更重視機制的解釋,像是 Connection ID 怎麼生成, flow control 的流程等等,有必要的時候我們再用 wireshark 來觀察。

我認為 wireshark 最好用的時機是自己在寫協定或者擴充時,可以用撈封包的方式代替在程式裡面加一堆 debug 的 info,如果哪邊欄位的 offset 填錯了,可以直接觀察封包來偵錯。

那反思就到這邊告一段落了,筆者要去思考一下明天要寫什麼 感謝!


上一篇
【Day 09】淺談 QUIC Handshake 流程 (三) - 設定 wireshark 來抓 QUIC 封包
下一篇
【Day 11】Negotiating Connection ID,建立連線時雙方如何協商 CID?
系列文
快還要更快,讀作 quick 的下一代傳輸層協定: QUIC23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言